home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacTech 1 to 12
/
MacTech-vol-1-12.toast
/
Reference
/
the cmsp digests ('94-'97)
/
csmp digest Vol 3 No 024
< prev
next >
Wrap
Internet Message Format
|
1997-05-06
|
71KB
From: pottier@clipper.ens.fr (Francois Pottier)
Subject: csmp-digest-v3-024
Date: Sat, 7 May 94 13:07:29 MET DST
C.S.M.P. Digest Sat, 07 May 94 Volume 3 : Issue 24
Today's Topics:
Anyone have routine for random numbers?
Async CD-ROM Drivers?
Comparing 2 LongDateTime's
Copying graphics the fast way (in assembler)
Favorite C++ Book?
Native PPC Interrupt Control?
SetDialogDefaultItem in a modal dialog
Symantec has an FTP site!
pascal and c libraries
The Comp.Sys.Mac.Programmer Digest is moderated by Francois Pottier
(pottier@clipper.ens.fr).
The digest is a collection of article threads from the internet newsgroup
comp.sys.mac.programmer. It is designed for people who read c.s.m.p. semi-
regularly and want an archive of the discussions. If you don't know what a
newsgroup is, you probably don't have access to it. Ask your systems
administrator(s) for details. If you don't have access to news, you may
still be able to post messages to the group by using a mail server like
anon.penet.fi (mail help@anon.penet.fi for more information).
Each issue of the digest contains one or more sets of articles (called
threads), with each set corresponding to a 'discussion' of a particular
subject. The articles are not edited; all articles included in this digest
are in their original posted form (as received by our news server at
nef.ens.fr). Article threads are not added to the digest until the last
article added to the thread is at least two weeks old (this is to ensure that
the thread is dead before adding it to the digest). Article threads that
consist of only one message are generally not included in the digest.
The digest is officially distributed by two means, by email and ftp.
If you want to receive the digest by mail, send email to listserv@ens.fr
with no subject and one of the following commands as body:
help Sends you a summary of commands
subscribe csmp-digest Your Name Adds you to the mailing list
signoff csmp-digest Removes you from the list
Once you have subscribed, you will automatically receive each new
issue as it is created.
The official ftp info is //ftp.dartmouth.edu/pub/csmp-digest.
Questions related to the ftp site should be directed to
scott.silver@dartmouth.edu. Currently no previous volumes of the CSMP
digest are available there.
Also, the digests are available to WAIS users as comp.sys.mac.programmer.src.
-------------------------------------------------------
>From truo8166@silver.SJSU.EDU (Thai Binh Truong)
Subject: Anyone have routine for random numbers?
Date: 21 Apr 94 20:47:04 GMT
Organization: San Jose State University - Math/CS Dept.
I'm looking for a routine that will generate
normally distributed random numbers. If anyone
know of any other routines that comes close to
it, please post. Thanks in advance.
-Thai
+++++++++++++++++++++++++++
>From Jim Conner <jc30@cornell.edu>
Date: 22 Apr 1994 16:00:20 GMT
Organization: Cornell University
Subject: Anyone have routine for random numbers?
From: Thai Binh Truong, truo8166@silver.SJSU.EDU
Date: 21 Apr 94 20:47:04 GMT
In article <truo8166.766961224@sjsumcs.sjsu.edu> Thai Binh Truong,
truo8166@silver.SJSU.EDU writes:
>I'm looking for a routine that will generate
>normally distributed random numbers. If anyone
>know of any other routines that comes close to
>it, please post. Thanks in advance.
>
>-Thai
>
Try looking in Numerical Recipes in Pascal (or C or Fortran, take your
pick). Each book in this set has several routines for generating uniform
deviates as well as other types of distributions. The routine for
normally distributed random numbers looks like this (in Pascal):
{ Global stuff... }
GasdevIset: integer;
GasdevGset: real;
begin
GasdevIset := 0;
{ Returns a normally distributed deviate with zero mean and unit
variance, }
{ using UniDev as the source of uniform deviates.
}
function gasdev: extended;
var
fac, r, v1, v2: extended;
begin
if GasdevIset = 0 then
begin
repeat
v1 := 2.0 * UniDev - 1.0;
v2 := 2.0 * UniDev - 1.0;
r := sqr(v1) + sqr(v2);
until (r < 1.0) and (r > 0.0);
fac := sqrt(-2.0 * ln(r) / r);
GasdevGset := v1 * fac;
gasdev := v2 * fac;
GasdevIset := 1
end
else
begin
GasdevIset := 0;
gasdev := GasdevGset;
end
end;
See Numerical Recipes for more details.
Jim Conner
+++++++++++++++++++++++++++
>From AppleGG@lamg.com (Gordon Apple)
Date: 22 Apr 1994 11:55:56 -0800
Organization: (none)
I'm looking for a routine that will generate
normally distributed random numbers. If anyone
know of any other routines that comes close to
it, please post. Thanks in advance.
I don't have the exact algorithms handy, but here are a couple of
suggestions (assuming you already have a good uniformly distributed random
number generator):
If you are just doing things like usual statistics, then the simplest
way is to generate a series of uniformly distributed variables and average
them. Even small series like 16 or so will give you very good results.
If you're working far out on the tail (5 or 10 standard deviations),
such as is often the case when working statistical communications problems,
you need something better. One of the best methods we found for our
simulations was to take a pair of uniformly distributed random variables and
use them to generate a pair of Gaussion rvs. To do this, you need to use an
exponential to map one variable into a Rayleigh amplitude distribution. Use
the other to generate a random angle from 0 to 2 * Pi. Use sin and cos to
get the two (independent) Gaussians. Works great. I've used it for years.
G. Gordon Apple, PhD
Advanced ommunications Engineering, Inc.
Redondo Beach, CA
+++++++++++++++++++++++++++
>From afcjlloyd@aol.com (AFC JLloyd)
Date: 22 Apr 1994 19:52:06 -0400
Organization: America Online, Inc. (1-800-827-6364)
In article <505016286.7954988@lamgnet.lamg.com>, AppleGG@lamg.com (Gordon
Apple) writes:
>>>
If you're working far out on the tail (5 or 10 standard deviations),
such as is often the case when working statistical communications problems,
you need something better. One of the best methods we found for our
simulations was to take a pair of uniformly distributed random variables and
use them to generate a pair of Gaussion rvs. To do this, you need to use an
exponential to map one variable into a Rayleigh amplitude distribution. Use
the other to generate a random angle from 0 to 2 * Pi. Use sin and cos to
get the two (independent) Gaussians. Works great. I've used it for years.
<<<
Code to implement this technique can be found in "Numerical Recipes in C".
The code given manages to avoid calling sin() and cos(), but it does require
a log() and a sqrt() (and a float divide). Here's the basic code:
do {
v1 = 2.0*ran() - 1.0;
v2 = 2.0*ran() - 1.0;
r = v1*v1 + v2*v2;
} while (r >= 1.0);
fac = sqrt(-2.0*log(r)/r);
ran() is a function returning a uniform deviate in the range 0.0 .. 1.0.
After computing the above, you can now get two independent normal deviates
by returning v1*fac and v2*fac. The deviates have zero mean and unit variance.
Jim Lloyd
afcjlloyd@aol.com
---------------------------
>From siegel@netcom.com (Rich Siegel)
Subject: Async CD-ROM Drivers?
Date: Wed, 13 Apr 1994 21:46:18 GMT
Organization: Bare Bones Software
(This is a philosophical question. If you can't spell "philosophy",
you're excused. :-])
A number of us, having nothing better to do, were idly wondering about
the pros and cons of the new SCSI Manager. One of its benefits is the
ability to disconnect and reconnect (provided the device supports it),
which leads directly to the ability for a driver to support async I/O
operations.
This obviously works well for high-speed SCSI devices and copying.
You can also perform some SCSI operations such as a format
asynchronously at the application level (drivers rarely, if ever, need
to format a disk); the app can issue the format, disconnect, and then
handle UA and reconnect.
However, my colleagues and I can't pin down and specific technical
benefits, besides the pure sex appeal, for supporting async I/O in a
CD-ROM driver.
Are we missing something? Can someone, or several someones, enumerate
the specific benefits for supporting async SCSI operation for CD-ROM
drives?
For the benefit of all, please post to this newsgroup.
R.
--
Rich Siegel % siegel@netcom.com % Principal, Bare Bones Software
--> For information about BBEdit, finger bbedit@world.std.com <--
"...yeah, I inhaled, and then I drank the bong water. So what're
you gonna do about it?" - Dennis Miller, on Bill Clinton
+++++++++++++++++++++++++++
>From resnick@cogsci.uiuc.edu (Pete Resnick)
Date: Thu, 14 Apr 1994 00:25:43 -0500
Organization: University of Illinois at Urbana-Champaign
In article <siegelCo7wH7.Lu5@netcom.com>, siegel@netcom.com (Rich Siegel) wrote:
>(This is a philosophical question. If you can't spell "philosophy",
>you're excused. :-])
I think I can spell it pretty well.
>This obviously works well for high-speed SCSI devices and copying.
Why does anyone care about async I/O on a high-speed device other than
pure sex appeal? On a high-speed device, I/O should happen so quickly that
calling it async should have no effect to your program.
>However, my colleagues and I can't pin down and specific technical
>benefits, besides the pure sex appeal, for supporting async I/O in a
>CD-ROM driver.
>
>Are we missing something? Can someone, or several someones, enumerate
>the specific benefits for supporting async SCSI operation for CD-ROM
>drives?
The best reason for any async I/O on any device is multitasking. It drives
me absolutely bananas that FSRead is written synchronously, because to
read 1 Meg at a time, people call:
buffPtr = NewPtr(1000000);
count = 1000000;
FSRead(refNum, &count, buffPtr);
This is ESPECIALLY horrible on a slow device, and worst over the network
(consider going over a 9600 bps ARA link). Why can't people do it right
and say:
paramBlock->ioParam.ioCompletion = nil;
paramBlock->ioParam.ioRefNum = refNum;
paramBlock->ioParam.ioBuffer = NewPtr(1000000);
paramBlock->ioParam.ioReqCount = 1000000;
PBReadAsync(paramBlock);
while(paramBlock->ioParam.ioResult > noErr)
HandleEvents();
So, the reason that a CD-ROM drive should have async I/O is exactly
because the damn things are slow. In all honesty, I don't see that there
is any other reason to have async I/O except to allow you to call your
event loop during I/O operations. Everything else is secondary.
Personally, I wish that FSRead called _Read asynchronously and provided a
filterProc which could continue to receive events while the damn read was
going on.
I am driven almost to tears every time I try to get anything done while
doing copies in the Finder (which, contrary to its documentation, can't do
a background copy to save its life) from a slow device because my machine
either comes to a complete screeching halt or behaves so poorly that I
can't get anything done (like typing a news article).
CD-ROM's should have async I/O before any device which is faster.
pr
--
Pete Resnick (...so what is a mojo, and why would one be rising?)
Graduate assistant - Philosophy Department, Gregory Hall, UIUC
System manager - Cognitive Science Group, Beckman Institute, UIUC
Internet: resnick@cogsci.uiuc.edu
+++++++++++++++++++++++++++
>From zobkiw@datawatch.com (joe zobkiw)
Date: Thu, 14 Apr 1994 13:20:42 GMT
Organization: Datawatch Corporation
In article <resnick-140494002543@ruger-6.slip.uiuc.edu>,
resnick@cogsci.uiuc.edu (Pete Resnick) wrote:
>
> CD-ROM's should have async I/O before any device which is faster.
>
Don't forget floppy disks...believe it or not...some people still use them!
:)
___________________________________________________________
_/_/_/_/ Joe Zobkiw ,,,
_/ Senior Software Engineer - -
_/ Datawatch Corporation L
_/_/_/_/ zobkiw@datawatch.com -
+++++++++++++++++++++++++++
>From rmcassid@uci.edu (Robert Cassidy)
Date: Thu, 14 Apr 1994 10:23:20 -0700
Organization: TLG Project
In article <siegelCo7wH7.Lu5@netcom.com>, siegel@netcom.com (Rich Siegel)
wrote:
>
> (This is a philosophical question. If you can't spell "philosophy",
> you're excused. :-])
>
> A number of us, having nothing better to do, were idly wondering about
> the pros and cons of the new SCSI Manager. One of its benefits is the
> ability to disconnect and reconnect (provided the device supports it),
> which leads directly to the ability for a driver to support async I/O
> operations.
>
> This obviously works well for high-speed SCSI devices and copying.
> You can also perform some SCSI operations such as a format
> asynchronously at the application level (drivers rarely, if ever, need
> to format a disk); the app can issue the format, disconnect, and then
> handle UA and reconnect.
>
> However, my colleagues and I can't pin down and specific technical
> benefits, besides the pure sex appeal, for supporting async I/O in a
> CD-ROM driver.
>
> Are we missing something? Can someone, or several someones, enumerate
> the specific benefits for supporting async SCSI operation for CD-ROM
> drives?
>
> For the benefit of all, please post to this newsgroup.
Well, here's a prime example. I work in a place where we take ancient Greek
writings (all of 'em) and encode them on CD-ROM. We sent our our first CD
about 8 years ago - we were one of the first. The CD contains about 500MB
of data, and only about 20MB of indices :-( As the first CD's were going
out a decision was made to create a machine dedicated to searching through
our CD looking for particular instances of words. The machine was based on
an 8MHz 68000 but at 8MHz it was just fast enough to search data at the
same rate that it came in (asynchronously) from the CD-ROM drive
(150K/sec). The whole process takes about 50 minutes.
Most users of our CD are Mac users (~50% worldwide). My Q800 with a 300CD
can search the CD in exactly the same amount of time as the 68000 above
because there is no asynchrounous. I've determined that if I rewrote the
Mac search programs (And I just might) that I would have the following
results:
For a full search (500MB)
running time processing time
PM6100 async ~30min <5min
PM6100 sync ~35min ~35min
The running time (when the program starts to when the program quits)
doesn't change much - but the processing time (how much I can't give back
to the system) drops drastically. So in 30 minutes (a lot of time in my
opinion) the user can recover 25 of it for other things and probably won't
even know the background task is running.
Just for measure. We have an HP1000 that most of our work is done on. It
takes about 6 hours for a full search with no other users on the system. A
PM8100 working asynchronously from HD could do it in under 5 min.
--
Robert Cassidy
TLG Project
UC Irvine
Let's hope 'Information SuperTollroad' isn't the catchphrase of the next
decade...
+++++++++++++++++++++++++++
>From rang@winternet.mpls.mn.us (Anton Rang)
Date: 15 Apr 1994 00:13:30 GMT
Organization: Minnesota Angsters
In article <zobkiw-140494082042@zobkiw.datawatch.com> zobkiw@datawatch.com (joe zobkiw) writes:
>In article <resnick-140494002543@ruger-6.slip.uiuc.edu>,
>resnick@cogsci.uiuc.edu (Pete Resnick) wrote:
>>
>> CD-ROM's should have async I/O before any device which is faster.
>>
>
>Don't forget floppy disks...believe it or not...some people still use them!
>:)
But they've had asynchronous I/O since the very first Macs!
(Believe it or not....)
--
Anton Rang (rang@winternet.mpls.mn.us)
+++++++++++++++++++++++++++
>From Steve Bryan <sbryan@maroon.tc.umn.edu>
Date: Sun, 17 Apr 1994 16:47:49 GMT
Organization: Sexton Software
In article <zobkiw-140494082042@zobkiw.datawatch.com> joe zobkiw,
zobkiw@datawatch.com writes:
>Don't forget floppy disks...believe it or not...some people still use
them!
I was under the impression that the driver for the floppy drive was (and
has been) asynchronous. The fact that it disables interrupts causing
mouse movement to become eratic diminishes the possible benefit of being
asynchronous.
Steve Bryan InterNet: sbryan@maroon.tc.umn.edu
Sexton Software CompuServe: 76545,527
Minneapolis, MN Fax: (612) 929-1799
+++++++++++++++++++++++++++
>From Brad Koehn <koehn@macc.wisc.edu>
Date: 18 Apr 1994 02:32:37 GMT
Organization: University of Wisconsin
In article <zobkiw-140494082042@zobkiw.datawatch.com> joe zobkiw,
zobkiw@datawatch.com writes:
>>
>> CD-ROM's should have async I/O before any device which is faster.
>>
>
>Don't forget floppy disks...believe it or not...some people still use
them!
>:)
Floppy I/O is asynchronous, check out a copy of Disk Charmer. It lets you
format floppies in the background. It's pretty chunky on my Duo, but it
works perfectly on a PPC.
_________________________________________________________________________
Brad Koehn Data Transformations, Inc. koehn@macc.wisc.edu
+++++++++++++++++++++++++++
>From bell@apple.com (Mike Bell)
Date: Wed, 20 Apr 1994 17:34:46 GMT
Organization: Apple Computer, Inc.
In article <siegelCo7wH7.Lu5@netcom.com>, siegel@netcom.com (Rich Siegel)
writes:
> Newsgroups: comp.sys.mac.programmer
> Path: gallant.apple.com!apple.com!taligent!ames!hookup!swrinde!ihnp4.
> ucsd.edu!library.ucla.edu!news.ucdavis.edu!csus.edu!netcom.com!siegel
> From: siegel@netcom.com (Rich Siegel)
> Subject: Async CD-ROM Drivers?
> Message-ID: <siegelCo7wH7.Lu5@netcom.com>
> Organization: Bare Bones Software
> Date: Wed, 13 Apr 1994 21:46:18 GMT
> Lines: 33
>
>
> (This is a philosophical question. If you can't spell "philosophy", you'
> re excused. :-])
>
> A number of us, having nothing better to do, were idly wondering about
> the pros and cons of the new SCSI Manager. One of its benefits is the
> ability to disconnect and reconnect (provided the device supports it),
> which leads directly to the ability for a driver to support async I/O
> operations.
>
> This obviously works well for high-speed SCSI devices and copying.
> You can also perform some SCSI operations such as a format
> asynchronously at the application level (drivers rarely, if ever, need
> to format a disk); the app can issue the format, disconnect, and then
> handle UA and reconnect.
>
> However, my colleagues and I can't pin down and specific technical
> benefits, besides the pure sex appeal, for supporting async I/O in a
> CD-ROM driver.
>
> Are we missing something? Can someone, or several someones, enumerate
> the specific benefits for supporting async SCSI operation for CD-ROM
> drives?
>
> For the benefit of all, please post to this newsgroup.
>
> R.
>
> --
> Rich Siegel % siegel@netcom.com % Principal, Bare Bones Software
> --> For information about BBEdit, finger bbedit@world.std.com <--
>
> "...yeah, I inhaled, and then I drank the bong water. So what're
> you gonna do about it?" - Dennis Miller, on Bill Clinton
>
Having async I/O in a CD ROM driver is very useful. It allows you to do
something with the data that you just read while simultaneously reading
another chunk off of the SLOW CD ROM drive. So, if a program is smart enough
to use multiple async reads from disc, effective throughput is greatly
increased by the async driver.
-Mike
****************************************************************************
Mike Bell email: bell@apple.com
Rock and Roll Project
2 Infinite Loop MS: 302-3SB
Cupertino, CA 95014
+++++++++++++++++++++++++++
>From jens_alfke@powertalk.apple.com (Jens Alfke)
Date: 21 Apr 94 01:03:58 GMT
Organization: Apple Computer
Pete Resnick, resnick@cogsci.uiuc.edu writes:
> Why does anyone care about async I/O on a high-speed device other than
> pure sex appeal? On a high-speed device, I/O should happen so quickly that
> calling it async should have no effect to your program.
By those standards I guess a RAM disk might qualify as "high speed" but not
anything else! My hard disk has a 14ms access time, and think of how much the
25MHz 040 in my now-lowly Quadra 700 could get done during those 350,000
clock cycles.
I was under the impression that the CD-ROM driver already did async I/O.
Doesn't QuickTime decode and render one frame while it's reading the next one
from the disk?
> I am driven almost to tears every time I try to get anything done while
> doing copies in the Finder (which, contrary to its documentation, can't do
> a background copy to save its life) from a slow device because my machine
> either comes to a complete screeching halt or behaves so poorly that I
> can't get anything done (like typing a news article).
You need the "ALLRight" utilities from MSA software. It has a background
copying feature (which used to be a standalone utility called COPYright) that
makes copies a breeze. Finder copies are forwarded to a small app that runs
in the background. It does all its I/O asynchronously, with little CPU
hogging even when copying to/from a floppy, a slow file server, or over ARA.
It'll do multiple copies at a time, too.
The other utilities in the package are not too original (a Helium clone, a
very weak SuperBoomerang clone, a BeHierarchic clone, etc.) and have some
serious bugs, but the copy utility is worth the price of the package.
--Jens Alfke
jens_alfke@powertalk Rebel girl, rebel girl,
.apple.com Rebel girl you are the queen of my world
+++++++++++++++++++++++++++
>From resnick@cogsci.uiuc.edu (Pete Resnick)
Date: Wed, 20 Apr 1994 21:47:49 -0500
Organization: University of Illinois at Urbana-Champaign
In article <1994Apr21.010358.20490@gallant.apple.com>,
jens_alfke@powertalk.apple.com (Jens Alfke) wrote:
>Pete Resnick, resnick@cogsci.uiuc.edu writes:
>> Why does anyone care about async I/O on a high-speed device other than
>> pure sex appeal? On a high-speed device, I/O should happen so quickly that
>> calling it async should have no effect to your program.
>
>By those standards I guess a RAM disk might qualify as "high speed" but not
>anything else! My hard disk has a 14ms access time, and think of how much the
>25MHz 040 in my now-lowly Quadra 700 could get done during those 350,000
>clock cycles.
I agree completely. I was just playing with what Rich Siegel said. Every
external device should support asynchronous I/O because every external
device is going to be really slow.
>> I am driven almost to tears every time I try to get anything done while
>> doing copies in the Finder (which, contrary to its documentation, can't do
>> a background copy to save its life) from a slow device because my machine
>> either comes to a complete screeching halt or behaves so poorly that I
>> can't get anything done (like typing a news article).
>
>You need the "ALLRight" utilities from MSA software. It has a background
>copying feature (which used to be a standalone utility called COPYright) that
>makes copies a breeze. Finder copies are forwarded to a small app that runs
>in the background. It does all its I/O asynchronously, with little CPU
>hogging even when copying to/from a floppy, a slow file server, or over ARA.
>It'll do multiple copies at a time, too.
But why can't the Finder do this?? Why is it that I need yet another patch
trapping, memory using (no matter how small) extra utility that does
something that could be done infinitely more easily in the Finder, which
should have done it in the first place? The code to write this into the
Finder itself is trivial. This is just a case of sloppy programming that
needs to be fixed, not extra functionality that a third-party program
should be solving.
pr
--
Pete Resnick (...so what is a mojo, and why would one be rising?)
Graduate assistant - Philosophy Department, Gregory Hall, UIUC
System manager - Cognitive Science Group, Beckman Institute, UIUC
Internet: resnick@cogsci.uiuc.edu
+++++++++++++++++++++++++++
>From rmcassid@uci.edu (Robert Cassidy)
Date: Thu, 21 Apr 1994 12:19:25 -0800
Organization: TLG Project
In article <resnick-200494214749@resnick.isdn.uiuc.edu>,
resnick@cogsci.uiuc.edu (Pete Resnick) wrote:
[stuff deleted]
> >> I am driven almost to tears every time I try to get anything done while
> >> doing copies in the Finder (which, contrary to its documentation, can't do
> >> a background copy to save its life) from a slow device because my machine
> >> either comes to a complete screeching halt or behaves so poorly that I
> >> can't get anything done (like typing a news article).
> >
> >You need the "ALLRight" utilities from MSA software. It has a background
> >copying feature (which used to be a standalone utility called COPYright) that
> >makes copies a breeze. Finder copies are forwarded to a small app that runs
> >in the background. It does all its I/O asynchronously, with little CPU
> >hogging even when copying to/from a floppy, a slow file server, or over ARA.
> >It'll do multiple copies at a time, too.
Well, not to be an ass or anything but COPYright and Copydoubler don't
always (do they ever) do asynchronous I/O. Those programs work on my Color
Classic and it doesn't support asynch I/O to SCSI. They do their magic just
in stolen cycles (it's much slower in the background than in the
forground) and actually do their work synchronously (at least on non 040
machines). I know it's picking nits but it is an async discussion...
> But why can't the Finder do this?? Why is it that I need yet another patch
> trapping, memory using (no matter how small) extra utility that does
> something that could be done infinitely more easily in the Finder, which
> should have done it in the first place? The code to write this into the
> Finder itself is trivial. This is just a case of sloppy programming that
> needs to be fixed, not extra functionality that a third-party program
> should be solving.
Apple has been avoiding this situation in its more recent software
(Powertalk at least) in that Powertalk runs as an appe instead of some big
hunk of the system. That way it takes cycles just like any app. I think the
biggest thing the Mac needs at this time is a threaded OS - spin the
copying off on a thread - formatting floppies - launching apps - etc. etc.
Apple has done really well in some things and poorly in others, Powertalk
is *wonderful* in this regard, PrintMonitor is good, but the finder stuff
_rots_. Isn't Apple working on a rewrite of the Finder, though? I thought I
heard rumors of that for 7.8 or something (I don't think it is planned for
7.5)
--
Robert Cassidy
TLG Project
UC Irvine
Let's hope 'Information SuperTollroad' isn't the catchphrase of the next
decade...
+++++++++++++++++++++++++++
>From rang@winternet.mpls.mn.us (Anton Rang)
Date: 21 Apr 1994 05:54:04 GMT
Organization: Minnesota Angsters
In article <9404200934.AA46914@Sort-of-a-900.Apple.com> bell@apple.com (Mike Bell) writes:
> Having async I/O in a CD ROM driver is very useful. It allows you to do
>something with the data that you just read while simultaneously reading
>another chunk off of the SLOW CD ROM drive. So, if a program is smart enough
>to use multiple async reads from disc, effective throughput is greatly
>increased by the async driver.
In particular, newer QuickTime versions (from 1.5 or 1.6, I forget
which) take advantage of this to overlap i/o and decompression....
--
Anton Rang (rang@winternet.mpls.mn.us)
---------------------------
>From srussell@reed.edu (Steven J. Russell)
Subject: Comparing 2 LongDateTime's
Date: 19 Apr 1994 21:08:02 GMT
Organization: Reed College, Portland, Oregon
I have a routine that compares two LongDateTime variables and tells me
if the first one is before the second one. Unfortunately, it converts
the LongDateTime types to LongDateRec types via LongSecs2Date and then
compares the old date format values, branching out at the appropriate
moment.
What I would like to do is skip the conversion to LongDateRec's and then
compare the LongDateTime variables that are passed in. Inside Mac: Text
says that the LongDateTime is a 64-bit signed representation of the number
of seconds since Jan 1, 1904. So, I check the high-bit of both and compare
the high-order and low-order longs. Seems to work most of the time. However,
I get LongDateTime values that are negative using this scheme (high-order bit
set) sometimes even though the date is, for instance, 18 April 1994!
Does anybody have code to compare LongDateTime's directly without conversion?
BTW, I am doing this for a speed optimization, sincemy program compares dates
and times frequently.
Thanks,
Steven Russell
srussell@reed.edu
+++++++++++++++++++++++++++
>From resnick@cogsci.uiuc.edu (Pete Resnick)
Date: Wed, 20 Apr 1994 00:28:41 -0500
Organization: University of Illinois at Urbana-Champaign
In article <2p1h7i$kk9@scratchy.reed.edu>, srussell@reed.edu (Steven J.
Russell) wrote:
>What I would like to do is skip the conversion to LongDateRec's and then
>compare the LongDateTime variables that are passed in.
This should be pretty easy. In Script.h is a typedef for LongDateCvt,
which gives you the high and low long of each. Here's a routine that
returns 1 if the first is greater, -1 if the first is less than, and 0 if
the first is equal to the second:
short CompareLongDate(LongDateTime *time1, LongDateTime *time2)
{
LongDateCvt temp1, temp2;
short returnVal;
temp1.c = *time1;
temp2.c = *time2;
if(temp1.hl.lHigh > temp2.hl.lHigh) {
returnVal = 1;
} else if(temp1.hl.lHigh < temp2.hl.lHigh) {
returnVal = -1;
} else {
if(temp1.hl.lLow > temp2.hl.lLow) {
returnVal = 1;
} else if(temp1.hl.lLow < temp2.hl.lLow) {
returnVal = -1;
} else {
returnVal = 0;
}
if(temp1.hl.lHigh < 0) {
returnVal = -returnVal;
}
}
return returnVal;
}
Will that do it?
pr
--
Pete Resnick (...so what is a mojo, and why would one be rising?)
Graduate assistant - Philosophy Department, Gregory Hall, UIUC
System manager - Cognitive Science Group, Beckman Institute, UIUC
Internet: resnick@cogsci.uiuc.edu
+++++++++++++++++++++++++++
>From peter.lewis@info.curtin.edu.au (Peter N Lewis)
Date: Thu, 21 Apr 1994 11:50:56 +0800
Organization: NCRPDA, Curtin University
>What I would like to do is skip the conversion to LongDateRec's and then
>compare the LongDateTime variables that are passed in. Inside Mac: Text
>says that the LongDateTime is a 64-bit signed representation of the number
>of seconds since Jan 1, 1904. So, I check the high-bit of both and compare
>the high-order and low-order longs. Seems to work most of the time. However,
>I get LongDateTime values that are negative using this scheme (high-order bit
>set) sometimes even though the date is, for instance, 18 April 1994!
Well, LongDateTime is an 64-bit signed number. But it's very unlikely
that it fills more than 48 bits, right? So why not take the bottom 24
bits and the next 24 bits (and ignore the top 16 bits), and compare the
top two first, and then the bottom two. This only requires the date to be
after 19040101, and before 2^48 seconds after that (8 million years I
think :-).
type LongLongInt=record
hi:longInt;
lo:longInt;
end;
var
c1,c2:LongDateTime;
l1,l2:LongLongInt;
begin
l1:=LongLongInt(c1);
l1.hi:=BAND(BSL(l1.hi,8),$00FFFF00)+BAND(BSR(l1.lo,16),$000000FF);
l1.lo:=BAND(l1.lo,$00FFFFFF);
ditto for l2
if l1.hi=l2.hi then
return l1.lo<l2.lo
else
return l1.hi<l2.hi
end-if
end;
Something like that anyway,
Peter.
_______________________________________________________________________
Peter N Lewis <peter.lewis@info.curtin.edu.au> Ph: +61 9 368 2055
+++++++++++++++++++++++++++
>From sparent@mv.us.adobe.com (Sean Parent)
Date: Thu, 21 Apr 1994 21:17:50 GMT
Organization: Adobe Systems Incorporated
Since LongDateTime is declared as a comp why not just use ">" - should at
least work in MPW C and Pascal.
Sean
In article <peter.lewis-210494115056@rocky.curtin.edu.au>,
peter.lewis@info.curtin.edu.au (Peter N Lewis) wrote:
>
> >What I would like to do is skip the conversion to LongDateRec's and then
> >compare the LongDateTime variables that are passed in. Inside Mac: Text
> >says that the LongDateTime is a 64-bit signed representation of the number
> >of seconds since Jan 1, 1904. So, I check the high-bit of both and compare
> >the high-order and low-order longs. Seems to work most of the time. However,
> >I get LongDateTime values that are negative using this scheme (high-order bit
> >set) sometimes even though the date is, for instance, 18 April 1994!
>
> Well, LongDateTime is an 64-bit signed number. But it's very unlikely
> that it fills more than 48 bits, right? So why not take the bottom 24
> bits and the next 24 bits (and ignore the top 16 bits), and compare the
> top two first, and then the bottom two. This only requires the date to be
> after 19040101, and before 2^48 seconds after that (8 million years I
> think :-).
>
> type LongLongInt=record
> hi:longInt;
> lo:longInt;
> end;
>
> var
> c1,c2:LongDateTime;
> l1,l2:LongLongInt;
> begin
> l1:=LongLongInt(c1);
> l1.hi:=BAND(BSL(l1.hi,8),$00FFFF00)+BAND(BSR(l1.lo,16),$000000FF);
> l1.lo:=BAND(l1.lo,$00FFFFFF);
> ditto for l2
> if l1.hi=l2.hi then
> return l1.lo<l2.lo
> else
> return l1.hi<l2.hi
> end-if
> end;
>
> Something like that anyway,
> Peter.
> _______________________________________________________________________
> Peter N Lewis <peter.lewis@info.curtin.edu.au> Ph: +61 9 368 2055
--
Sean Parent
+++++++++++++++++++++++++++
>From peter.lewis@info.curtin.edu.au (Peter N Lewis)
Date: Sat, 23 Apr 1994 12:24:01 +0800
Organization: NCRPDA, Curtin University
In article <sparent-210494141641@macb041.mv.us.adobe.com>,
sparent@mv.us.adobe.com (Sean Parent) wrote:
>Since LongDateTime is declared as a comp why not just use ">" - should at
>least work in MPW C and Pascal.
True - but it does it (at least in THINK Pascal) by calling zillions of
_Pack4 (SANE) traps. By the look of it, it converts the comp to an 80-bit
floating point number and then compares it. Not exactly efficient. I
just did a quick test on my LC3, and the SANE code for x<y required
exactly ten times more time than the code I posted. Of course, on the
PPC, things might well be different given the PPC executes floating point
faster than integer anyway.
Peter.
_______________________________________________________________________
Peter N Lewis <peter.lewis@info.curtin.edu.au> Ph: +61 9 368 2055
---------------------------
>From alex@metcalf.demon.co.uk (Alex Metcalf)
Subject: Copying graphics the fast way (in assembler)
Date: Sat, 23 Apr 1994 18:38:29 GMT
Organization: Demon Internet
My (cheap) version of CopyBits, in assembler
- ------------------------------------------
After I mentioned in a previous note that I had written a custom
copy routine, I got flooded with messages asking if I could post it for
others to see or use. So, here it is!
This code is taken directly from my new arcade game, to be released
in the next couple of months. I know it may be possible to make the code
faster, but it works fast enough for me. With this and similar routines
in my game, I get an increase of up to 500% over CopyBits and CopyMask.
This is mainly because I do far less checking than CopyBits does.
Also note that (I assume unlike CopyBits) this code may actually draw
to the screen when the electron beam is half way down the screen. So, the
top half of your graphic may appear slightly after the bottom half. You
need to read up on the Vertical Retrace manager and SlotVInstall if you
want to "sync" your animation with the electron beam of the screen.
The code copies a rectangle from an offscreen graphics world onto the
screen. The following assumptions are made:
o You're in 32-bit addressing mode
o The monitor is in 8-bit (256 colours/grays); 1 byte per pixel
o The cursor is hidden
o The source and destination rectangles are the same size
o The rectangles don't go off the screen or off the GWorld
o The rectangles are in coordinates which are local to the screen
(i.e. top left of screen is 0,0)
There are four globals used:
o gWorldPixMapBase is the pix map base address of the graphics world.
You use GetGWorldPixMap to get the pix map, and then you use
GetPixBaseAddr to get the base address.
o gScreenPixMapBase is the pix map base address of the screen.
You get the pix map from the GDHandle of the screen you're using. Then
you use GetPixBaseAddr.
If you're using the main monitor, you can get the GDHandle for that
monitor by using GetMainDevice ().
o gWorldRowByteCount is the rowBytes for the graphics world. You get
it like this:
gWorldRowByteCount = (0x7FFF & (**tWorldPixMap).rowBytes);
o gScreenRowByteCount is the rowBytes for the screen. You get it like
this:
gScreenRowByteCount = (0x7FFF & (**tScreenPixMap).rowBytes);
I hope the code is useful to someone: you might try using the code,
but it's much better if you read through and understand what's happening,
and then use parts of it in your own game, animation app, or whatever.
If you don't know how to read assembler, an excellent start is this
book:
How to Write Macintosh Software
by Scott Knaster
Published by Addison Wesley
ISBN 0-201-60805-7
Have fun!
Alex Metcalf
alex@metcalf.demon.co.uk
void RectCopy (Rect tSourceRect, Rect tDestRect)
{
asm
{
movem.l a0-a1/d0-d7, -(sp);
move.l gWorldPixMapBase, D0;
move.w tSourceRect.top, D1;
ext.l D1;
mulu.l gWorldRowByteCount, D1;
add.l D1, D0;
move.w tSourceRect.left, D1;
ext.l D1;
add.l D1, D0;
move.l D0, A0; // A0 is the source
move.l gScreenPixMapBase, D0;
move.w tDestRect.top, D1;
ext.l D1;
mulu.l gScreenRowByteCount, D1;
add.l D1, D0;
move.w tDestRect.left, D1;
ext.l D1;
add.l D1, D0;
move.l D0, A1; // A1 is the destination
move.w tSourceRect.right, D6;
move.w tSourceRect.left, D0;
sub.w D0, D6;
ext.l D6; // D6 is the width of rect to copy
move.l gWorldRowByteCount, D2;
sub.l D6, D2; // D2 is the source row offset
move.l gScreenRowByteCount, D3;
sub.l D6, D3; // D3 is the destination row offset
move.w tSourceRect.bottom, D4;
move.w tSourceRect.top, D0;
sub.w D0, D4;
ext.l D4;
subq.l #1, D4; // D6 is number of rows to copy
moveq.l #4, D5;
tst.l D4;
ble.s @6;
move.l D6, D0;
divs.l D5, D0;
move.l D5, D7;
mulu.l D0, D7;
move.l D6, D1;
sub.l D7, D1;
subq.l #1, D0;
subq.l #1, D1;
move.l D0, D6;
move.l D1, D7;
@1;
tst.l D0;
blt.s @3;
@2;
move.l (a0)+, (a1)+;
dbra d0,@2;
@3;
tst.l D1;
blt.s @5;
@4;
move.b (a0)+, (a1)+;
dbra d1,@4;
@5;
adda.l D2, A0;
adda.l D3, A1;
move.l D6, D0;
move.l D7, D1;
dbra d4,@1;
@6;
movem.l (sp)+, a0-a1/d0-d7;
}
}
--
Alex Metcalf, Mac programmer in C, C++, HyperTalk, assembler
Internet, AOL, BIX: alex@metcalf.demon.co.uk "Surely you
AppleLink: alex@metcalf.demon.co.uk@internet# can't be
CompuServe: INTERNET:alex@metcalf.demon.co.uk serious?"
Delphi: alex@metcalf.demon.co.uk@inet#
FirstClass: alex@metcalf.demon.co.uk,Internet "I am serious...
Fax (UK): (0570) 45636 and don't call
Fax (US / Canada): 011 44 570 45636 me Shirley."
---------------------------
>From jake@dxal13.cern.ch (Bob Jacobsen)
Subject: Favorite C++ Book?
Date: Wed, 13 Apr 1994 21:50:36 GMT
Organization: CERN, the European Organization for Nuclear Research
What books do people recommend for C++ on the Mac?
Two suggestions have been:
1) Learn C++ on the Macintosh, Dave Mark (1993). Comes with Thin C++ and a
cheap (how much?) upgrade offer.
2) Symantec C++ Programming for the Macintosh, Neil Rhodes and Julie
McKeehan
Neither of these is available at a local bookstore - if you had to order it
from the US and wait a month, which would you pick?
Bob Jacobsen, jake@afal01.cern.ch
+++++++++++++++++++++++++++
>From jaeger@kunikpok.icus.com (Jaeger)
Date: Thu, 14 Apr 94 11:36:11 CDT
Organization: Kunikpok Kennels and Komputers (Pet Project)
jake@dxal13.cern.ch (Bob Jacobsen) writes:
> What books do people recommend for C++ on the Mac?
>
> Two suggestions have been:
>
> 1) Learn C++ on the Macintosh, Dave Mark (1993). Comes with Thin C++ and a
> cheap (how much?) upgrade offer.
>
> 2) Symantec C++ Programming for the Macintosh, Neil Rhodes and Julie
> McKeehan
>
> Neither of these is available at a local bookstore - if you had to order it
> from the US and wait a month, which would you pick?
>
> Bob Jacobsen, jake@afal01.cern.ch
Hi Bob,
I can't tell you which one to get but I have the Rhodes and
McKeehan book so I can tell you something about it. The book is in three
parts: The Symantec environment (120pp), Intro to C++ (200pp), Using TCL
(180pp). There are also several appendices, source listings and a disk
with all the source from the book. The authors say that the book is a
practical approach not a comprehensive approach. Believe them. In my
opinion the first section is a waste of space. It repeats the
information given in the Symantec manuals. It is perhaps better than the
material in the actual manuals :-/ but I think the space could have
better been used to increase the size of sections two and three.
The Intro to C++ section isn't that bad. It gives you a lot of redundant
information about how to use SC++ as does the first section. It tells
you how to use the class browser for instance (gee that's a toughie). It
has a long discussion of the global optimizer. Apparently the authors
wrote the book with a prerelease version of SC++6.0. They go through
excruciating detail (dissasembled code) to explain how the global
optimizer works and of course they show all the places where it doesn't
(didn't?) work. IMHO most of this is useless. The actual intro to C++'
is useful and I learned some things from it. It should have been longer
and more complete. For example the discussion of multiple inheritance is
about 1.5 pages. The discussion of segmentation of your project in the
first section is about 2 pages. Which do you think is more important?
The third section has six chapters with code examples in each. I would
say that these are informative. There are some useful tips about using
TCL and using C++ in these chapters. However, this book doesn't cover
some of the more advanced features of C++ like templates and friends (and
probably others that I've never heard of).
I suppose that my problem was that I wanted an in-depth book about C++
that emphasized the Mac, and such a book doesn't exist.
There are a couple of annoying things about the book. All the TCL
documentation uses the terms 'instance variable' and 'method'. The book
uses the terms 'member variable' and 'member function' and never mentions
that these are the same thing. Also, the book uses an icon of a 5.25
floppy next to many of the source code examples. I wonder if the
authors' 'Macs' use these :-/
Basically I don't think the book is worth US$40. Also it's obsolete now
that SC++7 and TCL 2.0 are out. Look for the sequel.
Brian Stern }:-{)}
Jaeger@fquest.com
+++++++++++++++++++++++++++
>From fixer@faxcsl.dcrt.nih.gov (Chris Gonna' Find Ray Charles Tate)
Date: Fri, 15 Apr 1994 14:29:11 GMT
Organization: DCRT, NIH, Bethesda, MD
In addition to learning C++, I'm going to assume you want to learn how
to program in an object-oriented manner. This is not trivial; it
involves learning a new way of approaching programming, and of thinking
about things.
I recommend the book "Developing Object-Oriented Software on the
Macintosh," by Goldstein and Alger. It's part of the Macintosh
Inside-Out series from Addison-Wesley, though I don't have its
ISBN number handy. I *do* know that it's Addison-Wesley #57065,
list price $24.95.
It's an excellent discussion of the theoretical foundations of why
object-oriented software development is good, why it's hard to learn,
and what you can do about it. The book also presents a (IMHO good)
methodology and notation for developing OO software.
- -------------------------------------------------------------
Christopher Tate | "So he dropped the heart -
MSD, Inc. | the floor's clean."
fixer@faxcsl.dcrt.nih.gov | - Sidney Harris
+++++++++++++++++++++++++++
>From John Brewer <jbrewer@wri.com>
Date: Sat, 16 Apr 1994 16:41:49 GMT
Organization: Wolfram Research, Inc.
In article <jake-130494225036@csacbl6.cern.ch> Bob Jacobsen,
jake@dxal13.cern.ch writes:
>What books do people recommend for C++ on the Mac?
I'd recommend some general C++ books to start out with. Once you've
mastered the syntax and the key concepts of the language, then you can
branch out into platform-specific things like GUI frameworks. Trying to
do everything at once will result in information overload.
If I were teaching a C++ class right now, I'd have the following books be
required reading:
Lippman, Stanley _The C++ Primer_ (If you don't know C) OR
Pohl, Ira(?) _C++ for C Programmers_ (If you do know C)
Budd, Timothy _An Introduction to Object Oriented Programming_
The following would be recommended supplemental reading:
Meyers, Scott _Effective C++_
You'll probably also want to pick up one or both of the following for
reference:
Stroustrup, Bjarne _The C++ Programming Language_
Ellis & Stroustrup _The Annotated C++ Reference Manual_
The reason I recommend either Lippman or Pohl is that, while Lippman is
probably the better book, it assumes you have no knowledge of C. Since
Ihave over a decade of experience with C, I resent being told what a
"break" statement is again. I also find that when I try to skip over
the stuff I already know, I invariably skip some new stuff by mistake.
Pohl assumes you know C, and therefore only covers the differences. I
appreciate this approach.
Budd is a general book on object-oriented programming. It deals with
primarily with general concepts, not syntax, and has examples in C++,
Objective C, Object Pascal, and Smalltalk. It introduces the concepts
of classes and inheritance, as well as responsibility-driven design and
CRC cards.
Meyers is the best _second_ book on C++ that I know of. It contains a
lot of general tips for writing better code. The introduction alone
explained copy constructors better than some entire books.
I don't recommend Stroustrup as an introduction to C++, as it is way too
terse, but you really need it and/or the ARM as a language reference.
Good luck!
John Brewer
Wolfram Research, Inc.
(but speaking for myself)
+++++++++++++++++++++++++++
>From nick@pitt.edu ( nick.c )
Date: 20 Apr 94 01:48:56 GMT
Organization: (none)
In Article <jake-130494225036@csacbl6.cern.ch>, jake@dxal13.cern.ch (Bob
Jacobsen) wrote:
>What books do people recommend for C++ on the Mac?
>
>Two suggestions have been:
>
>1) Learn C++ on the Macintosh, Dave Mark (1993). Comes with Thin C++ and a
>cheap (how much?) upgrade offer.
Dave's book is good (I have it), but is kind of a "vol 2" to his
_Learn_C_on_the_Macintosh_, I think it would be hard to learn from
unless you'd read "vol 1". If you're already an ace at C - you'll
probably get a lot out of it.
I found an interesting book called _Symantec_C++_for_the_Macintosh:_
the_Basics_, by John May and Judy Whittle. It trys to explain
C++ without refering to C, and is very specific to the Symantec
environment. Unlike the two books you mentioned, this one is
stand alone (kind of impressive when you think of what it's trying
cover). It's not as detailed as having a seperate book on
C, on your environment, and on C++ - but it's very convenient to
have most of that info in one cover, and have it all with respect
to Symantec's environment.
-- nick
_/ _/ _/ _/_/_/ _/ _/ Sea Shells to C shells, Waikiki to
_/_/ _/ _/ _/ _/ _/_/_/ the Internet, a wave, is a wave...
_/ _/_/ _/ _/ _/ _/
_/ _/ _/ _/_/_/ _/ _/ CompSrv: 71232,766 I-Net: Nick@pitt.edu
+++++++++++++++++++++++++++
>From wang_dj@dev.gdb.org (David J. Wang)
Date: Thu, 21 Apr 1994 00:24:07 GMT
Organization: Genome Database
nick.c (nick@pitt.edu) wrote:
>In Article <jake-130494225036@csacbl6.cern.ch>, jake@dxal13.cern.ch (Bob
>Jacobsen) wrote:
>>What books do people recommend for C++ on the Mac?
>>
>>Two suggestions have been:
>>
>>1) Learn C++ on the Macintosh, Dave Mark (1993). Comes with Thin C++ and a
>>cheap (how much?) upgrade offer.
> Dave's book is good (I have it), but is kind of a "vol 2" to his
> _Learn_C_on_the_Macintosh_, I think it would be hard to learn from
> unless you'd read "vol 1". If you're already an ace at C - you'll
> probably get a lot out of it.
I have a different opinion about this -- I Learn C on the Macintosh --
and found it to be inadequate in dealing with both C as well as the
Macintosh. There is a minimal amount of information dealing with the
macintosh (I now have Macintosh C Programming Vol. and wouldn't know
what to do without iit -- although I wish I didn't have to pay $30 for
the source on disk), and a barely adequate amount of info. dealing
with C. I looked through Learn C++... today, and it appeared to be the same
situation.
I hear from others around here that the Pohl book is very good
however, and I own C by Dissection (Pohl, Kelley).
--
*************************************************************************
David J. Wang #include <std_disclaimer>
wang_dj@gdb.org (410)614-0393
wang_dj@server.cs.jhu.edu Biology@The Johns Hopkins University
Baltimore, Maryland 21210
************************************************************************/
+++++++++++++++++++++++++++
>From bootstrap1@aol.com (Bootstrap1)
Date: 23 Apr 1994 22:56:02 -0400
Organization: America Online, Inc. (1-800-827-6364)
In Article <jake-130494225036@csacbl6.cern.ch>, jake@dxal13.cern.ch (Bob
Jacobsen) wrote:
> What books do people recommend for C++ on the Mac?
I bought Stroustrup's The C++ Programming Language a few years ago and really
didn't care for it. I've looked for a really good book on the subject ever
since and last year came across Bruce Eckel's C++ Inside & Out. For me, it hit
the nail on the head; it was easy to read, gave good examples, and, best of
all, gave insight on the workings of the language behind the scenes, something
a lot of C++ books neglect.
---------------------------
>From jberry@teleport.com (James D. Berry)
Subject: Native PPC Interrupt Control?
Date: Thu, 14 Apr 1994 14:57:47 -0700
Organization: Consultant
Is there interface level support for disabling interrupts on the PowerMac?
I know that application code runs at User Level, but haven't tried hitting
the EE bit in the MSR (which I would presume would cause an exception that
might or might not get properly emulated). Is this the only level of
support? Or is there some hook into the nanokernel to set the interrupt
level?
This is required to enforce mutual exclusion (since we don't yet have good
kernel level support--I want V1/NuKernel!) and I don't want to enter the
emulator just to modify the interrupt level.
--
James Berry
jberry@teleport.com
+++++++++++++++++++++++++++
>From creiman@netcom.com (Charlie Reiman)
Date: Fri, 15 Apr 1994 07:07:27 GMT
Organization: NETCOM On-line Communication Services (408 241-9760 guest)
jberry@teleport.com (James D. Berry) writes:
>Is there interface level support for disabling interrupts on the PowerMac?
>I know that application code runs at User Level, but haven't tried hitting
>the EE bit in the MSR (which I would presume would cause an exception that
>might or might not get properly emulated). Is this the only level of
>support? Or is there some hook into the nanokernel to set the interrupt
>level?
>This is required to enforce mutual exclusion (since we don't yet have good
>kernel level support--I want V1/NuKernel!) and I don't want to enter the
>emulator just to modify the interrupt level.
I can't say for sure about disabling interrupts, but I have been
attacked by user mode limits on my PPC hacking. If all you need is
simple mutex stuff, get a 601 manual and look in the back for the code
examples covering mutuexes (mutexi? or is that a breakfast cereal...)
Or just look up information on load/store with reservation.
--
"You can't cancel the project! We already made the T-shirts!"
Charlie Reiman
creiman@netcom.com
+++++++++++++++++++++++++++
>From rang@winternet.mpls.mn.us (Anton Rang)
Date: 16 Apr 1994 00:02:23 GMT
Organization: Minnesota Angsters
In article <creimanCoAH4G.BJG@netcom.com> creiman@netcom.com (Charlie Reiman) writes:
>If all you need is simple mutex stuff, get a 601 manual and look in
>the back for the code examples covering mutuexes (mutexi? or is that
>a breakfast cereal...) Or just look up information on load/store
>with reservation.
That works great if you have two competing user-level threads. If
you're trying to synchronize against interrupt-level routines (like an
I/O completion routine, driver, VBL task), you can't easily use a
mutex because there's no convenient way to ask the system to schedule
the running task for a later time.
Of course, you can always implement your own process scheduler and
run everything through it (I did this once for a Nubus card driver
back when I was young and foolish). But it's very difficult to make
sure that every case is properly handled, and it shouldn't be that
much work....
--
Anton Rang (rang@winternet.mpls.mn.us)
+++++++++++++++++++++++++++
>From rang@winternet.mpls.mn.us (Anton Rang)
Date: 15 Apr 1994 00:23:58 GMT
Organization: Minnesota Angsters
In article <jberry-140494145747@ppp-005.teleport.com> jberry@teleport.com (James D. Berry) writes:
>Is there interface level support for disabling interrupts on the PowerMac?
There is absolutely no documented way to do this, and I'm very leery
of digging into the nanokernel to do it. I've had several engineers
from Apple tell me that I shouldn't even think about it. No word yet
on whether this will be added at some point, though I've heard that
the group working on porting the Appletalk protocol stack has
requested such a capability.
I understand *why* they don't want people messing with interrupts
(especially with Geoport support and such), but at the same time, it's
a major bottleneck in the driver-level work I'm doing.
>This is required to enforce mutual exclusion (since we don't yet have good
>kernel level support--I want V1/NuKernel!) and I don't want to enter the
>emulator just to modify the interrupt level.
And if you enter the emulator, it only modifies the emulator's
interrupt level. You can still get low-level interrupts, though I
believe that currently all system-call-back interrupts (e.g. VBL
tasks, Time Manager, etc.) go through the emulator and thus obey the
restriction.
I need mutual exclusion for a memory pool (darn Memory Manager won't
run at interrupt time :-), and an allocation/free pair which takes 4us
in PPC code takes nearly 100us if I switch into and out of emulation
for it. Really sucks.
Anyone from Apple listening to our pleas? (Anyone with the $$$ to be
an Apple Partner who might have clout enough to let us call the
nanokernel for this until NuKernel is out?)
--
Anton Rang (rang@winternet.mpls.mn.us)
>From Eric Anderson <eric_anderson@quickmail.apple.com>
Subject: Native PPC Interrupt Control?
Date: Tue, 19 Apr 1994 03:06:46 GMT
Organization: Apple Computer
Re: Native PPC Interrupt Control?
Yes, folks here at Apple are listening to your pleas. In fact, if you
look at the native Thread Manager, you will note the lack of preemptive
threads - this is because the native interrupt runtime model is not
exported outside the kernel. Yes, we need to wait for the new kernel
before we get such native niceties as native interrupt handling (in some
form(s)) to provide better I/O and tasking services both inside Apple and
from our developer community.
Eric Anderson
Mac OS
Apple Computer, Inc.
+++++++++++++++++++++++++++
>From benh@fdn.org (Benjamin Herrenschmidt)
Date: Tue, 19 Apr 94 23:01:05 +0100
Organization: (none)
>
>In article <RANG.94Apr14192358@icicle.winternet.mpls.mn.us> (comp.sys.mac.programmer), rang@winternet.mpls.mn.us (Anton Rang) writes:
>
>In article <jberry-140494145747@ppp-005.teleport.com> jberry@teleport.com (James D. Berry) writes:
>>Is there interface level support for disabling interrupts on the PowerMac?
>
> There is absolutely no documented way to do this, and I'm very leery
>of digging into the nanokernel to do it. I've had several engineers
>from Apple tell me that I shouldn't even think about it. No word yet
>on whether this will be added at some point, though I've heard that
>the group working on porting the Appletalk protocol stack has
>requested such a capability.
>
> I understand *why* they don't want people messing with interrupts
>(especially with Geoport support and such), but at the same time, it's
>a major bottleneck in the driver-level work I'm doing.
>
>>This is required to enforce mutual exclusion (since we don't yet have good
>>kernel level support--I want V1/NuKernel!) and I don't want to enter the
>>emulator just to modify the interrupt level.
>
> And if you enter the emulator, it only modifies the emulator's
>interrupt level. You can still get low-level interrupts, though I
>believe that currently all system-call-back interrupts (e.g. VBL
>tasks, Time Manager, etc.) go through the emulator and thus obey the
>restriction.
>
> I need mutual exclusion for a memory pool (darn Memory Manager won't
>run at interrupt time :-), and an allocation/free pair which takes 4us
>in PPC code takes nearly 100us if I switch into and out of emulation
>for it. Really sucks.
>
> Anyone from Apple listening to our pleas? (Anyone with the $$$ to be
>an Apple Partner who might have clout enough to let us call the
>nanokernel for this until NuKernel is out?)
>--
>Anton Rang (rang@winternet.mpls.mn.us)
I completely agree with you ! as a Nubus card driver designer and
a low level developper (i work on drivers, interrupts, network software
etc...), a way to mask interrupts is VERY important. It is the only
way to do some tasks at interrupt level. Another VERY important thing
is to be able to do atomic read-test-modify like the TAS instruction
of the 68K to do semaphores. They are REQUIRED to work with "resources"
shared between several processors. (main processor and a DSP for example).
It would be a VERY BAD thing from apple to remove the ability of having
uninterruptible pieces of code and atomic semaphores.
I hope Apple will soon release a technote with everything we MUST
know about these. (remeber that not all macintoshes support the TAS
instruction which is really a pain when you have to build an interface
between the mac and another processor, on a PDS card for example).
Hey, Apple ! do you listen to us ? will you do it ?
BenH.
+++++++++++++++++++++++++++
>From mrustad@aol.com (MRustad)
Date: 23 Apr 1994 01:05:05 -0400
Organization: America Online, Inc. (1-800-827-6364)
In article <01050105.tk4phy@tatooine.fdn.org>, benh@fdn.org (Benjamin
Herrenschmidt) writes:
>I hope Apple will soon release a technote with everything we MUST
>know about these. (remeber that not all macintoshes support the TAS
>instruction which is really a pain when you have to build an interface
>between the mac and another processor, on a PDS card for example).
Ben,
TAS is not all that important. I did the multiprocessor interlocking for A/ROSE
and could not use TAS at all anywhere (even for single processor
locks) due to nasty bus error conditions that could arise with the 68000
coprocessors. In previous positions I worked on CDC Cybers that had a bunch of
processors in the box and nothing remotely like a TAS. There are lots of neat
tricks that really work better than TAS anyway.
Of course, you can continue to use the emulator, which does TAS for you, if it
is that important to you (but my stuff will run faster than yours!).
-Mark Rustad, mdr@apple.com
---------------------------
>From walkerm@acf2.nyu.edu (Michael A. Walker)
Subject: SetDialogDefaultItem in a modal dialog
Date: Wed, 20 Apr 1994 09:15:01 -0500
Organization: New York University
Hi. Please forgive this question if it's a FAQ. I'm trying to use
SetDialogDefaultItem for a modal dialog and I'm having some
problems (well, one problem--it's not working ;-). Within my
routine that displays the dialog, I call SetDialogDefaultItem
as I'm suppose to do. The problem comes in when I call
ModalDialog using my own dialog filter which is used to control
a read-only scrolling text region. Somehow, the call to
SetDialogDefaultItem is reversed or ignored since I added the
dialog filter. Here is a snippet of the code:
void ShowAbout(void)
{
DialogPtr dialog;
Boolean dialogDone = false;
short itemHit, itemType;
/* deleted stuff */
dialog = GetNewDialog(kAboutResID, nil, kMoveToFront);
SetDialogDefaultItem(dialog, ok);
SetDialogTracksCursor(dialog, true);
/* deleted stuff */
ShowWindow(dialog);
SetPort(dialog);
GetDItem(dialog, ok, &itemType, &okItemHandle, &itemRect);
/* you guessed it, more deleted stuff */
while (! dialogDone) {
ModalDialog(AboutDlgFilter, &itemHit);
switch (itemHit) {
case ok:
dialogDone = true;
break;
}
}
DisposDialog(dialog);
}
Is there something else I have to do?
Thanks in advance.
--
Michael A. Walker
New York University
walkerm@acf2.nyu.edu
==============================================------------------------8-;
main() {int x,y,k;char *b=" .:,;!/>)|&IH%*#@";double
cr,ci,zr,zi,temp,cx,cy;
for(y=30;puts(""),cy=y*0.1-1.5,y-->=0;){for(x=0;cx=x*0.04-2,zr=0,zi=0,x++<75;)
{for(cr=cx,ci=cy,k=0;temp=zr*zr-zi*zi+cr,zi=2*zr*zi+ci,zr=temp,k<112;k++)
if(zr*zr+zi*zi>10)break;printf("%c",b[k%16]);}}} /* try this on for
size!! */
+++++++++++++++++++++++++++
>From Kevin.R.Boyce@gsfc.nasa.gov (Kevin R. Boyce)
Date: Wed, 20 Apr 1994 12:46:05 -0400
Organization: NASA/GSFC
In article <walkerm-200494091501@walker.infocenter.nyu.edu>,
walkerm@acf2.nyu.edu (Michael A. Walker) wrote:
> Hi. Please forgive this question if it's a FAQ. I'm trying to use
> SetDialogDefaultItem for a modal dialog and I'm having some
> problems (well, one problem--it's not working ;-). Within my
> routine that displays the dialog, I call SetDialogDefaultItem
> as I'm suppose to do. The problem comes in when I call
> ModalDialog using my own dialog filter which is used to control
> a read-only scrolling text region. Somehow, the call to
> SetDialogDefaultItem is reversed or ignored since I added the
> dialog filter.
You didn't include your dialog filter, but I bet it doesn't call the
standard filter proc. Here's one that doesn't handle any dialog events,
but correctly passes update events on to other windows (this is taken
almost verbatim from the "Pending Update Perils" technote):
pascal Boolean BasicDlogFilter( DialogPtr currentDialog,
EventRecord *theEventIn, short *theDialogItem)
{
OSErr myErr;
ModalFilterProcPtr standardProc;
Boolean returnVal = false;
WindowPtr temp;
if( (theEventIn->what == updateEvt) &&
(theEventIn->message != (long)currentDialog) )
{
returnVal = DoUpdate(theEventIn); /* go to my update routine */
}
else
{
GetPort(&temp);
SetPort(currentDialog);
myErr = GetStdFilterProc((ProcPtr)&standardProc);
if(!myErr)
returnVal = standardProc( currentDialog, theEventIn, theDialogItem );
SetPort(temp);
}
return(returnVal);
}
(Apologies if the formatting is screwed up. Boy I wish NewsWatcher handled
tabs correctly. Time to take another look at the source...)
--
Kevin Kevin.R.Boyce@x500.gsfc.nasa.gov
You can blow out a candle, but you can't blow out a fire.
Once the flame begin to catch, the wind will blow it higher.
--Peter Gabriel, 1980 (_Biko_)
+++++++++++++++++++++++++++
>From Stephan Bublava <stephan@iguwnext.tuwien.ac.at>
Date: 21 Apr 1994 06:08:54 GMT
Organization: Vienna University of Technology
In article <walkerm-200494091501@walker.infocenter.nyu.edu> Michael A.
Walker, walkerm@acf2.nyu.edu writes:
>Hi. Please forgive this question if it's a FAQ. I'm trying to use
>SetDialogDefaultItem for a modal dialog and I'm having some
>problems (well, one problem--it's not working ;-).
>[snip]
>Somehow, the call to SetDialogDefaultItem is reversed or ignored
>since I added the dialog filter.
You must call the default filter from your modal dialog filter.
How to to this is described in the TechNote that describes the
new Dialog Manager routines.
Stephan
--
Stephan Bublava
stephan@iguwnext.tuwien.ac.at
---------------------------
>From baileyc@gmg.com (Christopher R. Bailey)
Subject: Symantec has an FTP site!
Date: 22 Apr 1994 15:34:28 GMT
Organization: DejaView Software, Inc.
Maybe most of you already know this, but I didn't and I've never seen anything
about it. I was sick of waiting for the CPlusLib update from Symantec for
7.0. So I called them, and the guy told me to ftp to their site:
devtools.symantec.com
Sure enough it was there, along with all the other updates. Now, why couldn't
Symantec post on here telling us about that? I realize they may not want
their ftp machine getting loaded up, but if they don't, then they should have
posted it to Sumex (as if we can get in there). I wasted a phone call, as
well as I've probably now started that totally lame limited 90 days of support
crap that they've started. What a joke! (Hmm, it seems Symantec bashing is
now a required part of every post on these groups :)
--
________________________________________________________
Christopher Bailey Work: baileyc@dejaview.com
Software Engineer Home: baileyc@beetle.com
DejaView Software Inc. http://bigmac.gmg.com/
---------------------------
>From Ben J Fry <bf2c+@andrew.cmu.edu>
Subject: pascal and c libraries
Date: Tue, 19 Apr 1994 21:31:59 -0400
Organization: Freshman, Design, Carnegie Mellon, Pittsburgh, PA
is there any way to write a function in think pascal and have it
available for use in a think c project? how would this be done, and how
would you do the opposite, compiling something in c and calling it from
pascal?
thanks in advance...
ben
bf2c+@andrew.cmu.edu
+++++++++++++++++++++++++++
>From ingemar@lysator.liu.se (Ingemar Ragnemalm)
Date: 22 Apr 1994 09:24:52 GMT
Organization: (none)
Ben J Fry <bf2c+@andrew.cmu.edu> writes:
>is there any way to write a function in think pascal and have it
>available for use in a think c project? how would this be done, and how
>would you do the opposite, compiling something in c and calling it from
>pascal?
Both are quite possible. I've even had projects where I write a lib mostly
in Pascal, but calling a C-lib (for the inline assembler). Then I make a
library of it, so my C-using friend can use it. That means that the code
has three layers, C-Pascal-C!
Using C from Pascal is simple. The C functions must be declared "Pascal".
You build a library and write an interface file.
Using Pascal from C takes a bit more, mostly due to limitations in the
Think compilers, and very poor documentation. (May I say "bugs"?)
You build a library from the Pascal code and convert it with oConv.
BUT something is wrong with how either Think Pascal sets the function names
or how oConv converts them, so capitalization might get wrong. You can fix
that by checking the ".v" box, edit the .v file to he correct capitalization
in the cases where you get problems, and then oConv again, still with ".v"
checked.
BUT your Pascal library might rely on some of Think Pascal's built-in
functions, usually LMUL and LDIV. The fix I've been recommended, and that
I am using, is to include uRuntime.lib in the Pascal library. This works
just great with Think C 5. (Note that Symantec's support people seem to
know nothing about how to do this.)
BUT Think C version 6 has a bug in its linker! If you include uRuntime.lib,
you get a link error telling you that a function isn't defined - a function
that is in the ROM's since 1984! (MaxApplZone if I remember right.) This can
be fixed by opening the library and remove a segemnt that is named %_TOOLBOX
(or something like that).
BUT that is only possible using Think C 5! If you don't have Think C 5,
you'll have to ask someone who has it to do it. I guess we could convert
uRuntime.lib to a C library and remove it, and post...
BUT is that legal, or is it breaking some copyright that Symantec has?
If you have Think C 5, it isn't a big problem.
The whole problems should be simpler with CodeWarrior. Can anyone confirm
that?
--
- -
Ingemar Ragnemalm, PhD
Image processing, Mac shareware games
E-mail address: ingemar@isy.liu.se or ingemar@lysator.liu.se
---------------------------
End of C.S.M.P. Digest
**********************